iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
Software Development

我命由我不由語言 java爬蟲挑戰系列 第 15

java爬蟲挑戰 Day 15 - Java Discord API (JDA) 導入

  • 分享至 

  • xImage
  •  

什麼是 JDA?

JDA (Java Discord API) 是一個非官方的 Discord API 函式庫,專為 Java 開發者設計。它提供了多樣的功能,讓開發者能夠輕鬆地與 Discord 平台進行互動,包括處理訊息、管理伺服器、與用戶互動等。

安裝 JDA

首先,在 Maven 專案中加入 JDA 的依賴。打開 pom.xml 檔案,並在 區塊中加入以下內容:

<dependency>
	<groupId>net.dv8tion</groupId>
	<artifactId>JDA</artifactId>
	<version>5.1.0</version>
</dependency>

如何使用 JDA 實現一個簡單的 Discord Bot

我們的爬蟲專案現在是排程觸發,還需要一個執行序去管理Discord Bot,我們一樣使用Spring提供的ApplicationRunner。

DiscordBotRunner

package tw.grass.rental_crawler;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;

@Component
public class DiscordBotRunner implements ApplicationRunner   {

    @Value("${discord.token}")
    private String discordToken;
    
    Logger log = LoggerFactory.getLogger(DiscordBotRunner.class);

    @Override
    public void run(ApplicationArguments args) throws Exception {
        JDABuilder builder = JDABuilder.createDefault(discordToken);
        JDA jda = builder.build();
        log.info("Discord bot creation completed.");
    }
}

說明

discordToken 來自於我的設定檔,前如之前所說,必須自己保存好,我就不推上git了。
tokenk來自於:
https://ithelp.ithome.com.tw/upload/images/20240901/20168635MwBs21t2Gu.png

application.properties 增加token.properties

spring.config.import=parameter.properties,token.properties

token.properties

token

discord.token=自己的token

啟動

https://ithelp.ithome.com.tw/upload/images/20240901/20168635tfyresfOhg.png
可以看到機器人上線了。

加入監聽器(Listener)

因為機器人必須監聽使用者輸入的文字,JDA一樣有提供我們方便的監聽器(Listener)使用,為了方便理解,我們直接寫在DiscordBotRunner裡面。

@Override
public void run(ApplicationArguments args) throws Exception {

    JDABuilder builder = JDABuilder.createDefault(discordToken);
    builder.addEventListeners(new DiscordBotListener());
    JDA jda = builder.build();
    log.info("Discord bot creation completed.");
}

class DiscordBotListener extends ListenerAdapter {
    @Override
    public void onMessageReceived(MessageReceivedEvent event) {
        String message = event.getMessage().getContentRaw();
        log.info("Received: {}", message);
    }
}

Override一個onMessageReceived的事件,當使用者打字時,我會將使用者輸入的訊息印出來。

接著,隨便打點字。
https://ithelp.ithome.com.tw/upload/images/20240901/20168635pQfYA2HI1F.png

https://ithelp.ithome.com.tw/upload/images/20240901/20168635rMvA19vXhH.png

原因是:Discord現在規定,如果要接收使用者的訊息,需要先啟用MESSAGE_CONTENT。所以我們再前往Discord 開發者平台進行設定。
點開下面按鈕:
https://ithelp.ithome.com.tw/upload/images/20240901/20168635BHhUPD9aGf.png

Java程式碼也要設定。

builder.enableIntents(GatewayIntent.MESSAGE_CONTENT); // 啟用 MESSAGE_CONTENT Intent

https://ithelp.ithome.com.tw/upload/images/20240901/20168635CvQ2XJS8cG.png

接著我們再次執行及輸入文字。
https://ithelp.ithome.com.tw/upload/images/20240901/20168635oMV5Tr3WNZ.png

https://ithelp.ithome.com.tw/upload/images/20240901/20168635qShmIvcCY2.png

git現狀

https://ithelp.ithome.com.tw/upload/images/20240901/20168635Rn7IrUeW9a.png

小結

今天我們成功了導入JDA,並且已經可以接收使用者輸入的文字了。明天會繼續使用JDA提供的API進行更多的實驗。


上一篇
java爬蟲挑戰 Day 14 - 建立Discord Bot並加入伺服器
下一篇
java爬蟲挑戰 Day 16 - 實作Discord Bot的基本功能 (1)
系列文
我命由我不由語言 java爬蟲挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言